var PlugAPI = require('plugapi');
 
var bot = new PlugAPI({
    "email": "spam@lioche.be",
    "password": "lolipopilol"
});
bot.connect('novacube'); // The part after https://plug.dj 
 
bot.on('roomJoin', function(room) {
    console.log("Joined " + room);
});

/* Bot by @Lioche pour la communautée #LiocheClub et le petit @zyuiop de #SamaGames*/
API.on(API.ADVANCE, callback);
API.on(API.CHAT_COMMAND, command);
API.on(API.USER_JOIN, listener);
API.on(API.CHAT, chatlistener);
var v = "2.9.3";

/* Pour que le bot s'active, il faut avoir au minimum le grade GESTIONNAIRE */
var user = API.getUser();
var users = ["0",
];
if(user.role >= 3){
	API.sendChat("[Bot] Bot activé pour le compte: " + user.username + " [v"+v+"]");
}else{
	/* Si grade est pas videur ou plus > désactivation */
	API.chatLog("[Bot] Grade minimum requis: MANAGER");
	API.chatLog("|~ Désactivation du bot !");
	API.off(API.ADVANCE);
	API.off(API.CHAT_COMMAND);
	API.off(API.USER_JOIN);
	API.off(API.CHAT);
}

var msgs = ["|~ Je suis un bot créé par Lioche."];

/* Envoi du message toute les 60 min par défaut */
var time = 3600;
var timer;
/* Limite définie à 6m20s par défaut */
var max = 380; 

/* Quelques chansons 'paillardes' blacklistées par défaut*/
/* Blacklist par ID de vidéo. (ex: https://www.youtube.com/watch?v=ID) */
var black = ["NCbhEYXqkCQ", 
"nny5L-pDTPo",
"JOknb9GqeTk",
"GqmNuILxbEc",
"MVSguw8Qark",
"R4j01-uUMck",
"gn5GZocYV6I",
"_w4Xulsjo5I",
"EiMCK79lLTE",
"KW-hgjsF3pA",
"JDV08QEh7QM",
"vvhr3PFHX-k"];

 /* --------------GESTION DJ/MUSIQUE-------------*/
function callback (){
		
	var temps = API.getMedia().duration;
	var id = API.getMedia().cid;
	var hist = API.getHistory();

		for (var i = 0; i < (hist.length - 21); i++) {
			if (hist[i].media.cid == id) {
				var i = 99;
        			API.sendChat("[Bot] @" + dj + " ~ Musique passée récemment. Merci de ne plus la passer d'ici un moment !");
        			setTimeout(function() {
        			API.moderateForceSkip();}, 10000);
        		}
        } 
  
        	black.forEach(function(element) {
	        	if (element === id) {
	        		API.sendChat ("[Bot] @" + dj + " ~ La chanson est blacklistée, désolé !");
        			setTimeout(function() {        			
        			API.moderateForceSkip();}, 5000);
	        	}
	        });
   				
            	if (temps > max) {
            		API.sendChat("[Bot] @" + dj + " ~ La chanson est trop longue. Skip dans 35s (extrait seulement) !");
                	setTimeout(function() {
                     		API.sendChat("[Bot] Musique complète - https://www.youtube.com/watch?v=" + id);                  
                     		API.moderateForceSkip();}, 35000);
                }else if (temps >= (max - 20)) {
                	API.sendChat("[Bot] @" + dj + " ~ La limite est de " + max + " secondes. Attention !");
                }
} 
 
 /* --------------GESTION COMMANDES-------------*/
function command(value) {
        var commandfunction = "";
        
        if (value.indexOf(" ") == -1) {
                var commandfunction = value.substring(value.indexOf("/")+1,value.length);
        } else {
                var commandfunction = value.substring(value.indexOf("/")+1,value.indexOf(" "));
        }
        var commandcontent =  value.substring(value.indexOf(" ")+1,value.length);
       
        switch(commandfunction)
        {
                case "add":
                        msgs.push(commandcontent);
                        API.chatLog("[Bot] Le message ajouté est: \'" + commandcontent + "\'");
                break;
                case "check":
                        API.chatLog("[Bot] Le message numéro "+ commandcontent + " est \'" + msgs[parseInt(commandcontent)-1] +"\'");
                break;
                case "list":
                        API.chatLog("[Bot] " + msgs.length.toString() + " message(s) dans la liste");
                        API.chatLog("[Bot] " + (msgs.join()));
                break;
                case "remove":
                        msgs.splice(parseInt(commandcontent)-1,1);
                        API.chatLog("[Bot] Le message " + commandcontent + " a été enlevé");
                break;
                case "stop":
                        stoptimer();
                        API.chatLog("[Bot] Les messages ne seront plus envoyés !");
                break;
                case "start":
                        refreshtimer();
                        API.chatLog("[Bot] Les messages seront envoyés !");
                break;
                case "timer":
                        time = parseInt(commandcontent);
                        API.chatLog("[Bot] Les messages seront postés toutes les " + commandcontent + " secondes.");
                        refreshtimer();
                break;
                case "send":
                        API.sendChat(msgs[parseInt(commandcontent)-1]);
                break;
                case "max":
                        max = parseInt(commandcontent);
                        API.sendChat("[Bot] Skip des chansons de plus de " + max + " secondes !");
                break;
                case "black":
                	var titre = API.getMedia().title;
			var id = API.getMedia().cid;
			var dj = API.getDJ().username;
                        black.push(id);
                        API.sendChat("[Bot] Ajout de: " + titre + " à la blacklist !");
        		setTimeout(function() {        			
        		API.moderateForceSkip();}, 5000);
                break;
                case "blacklist":
			API.chatLog("[Bot] Blacklist: " + black.join(), true);
                break;
                case "id":
                   	var id = API.getMedia().cid;
                	API.chatLog("[Bot] ID: " + id, true);
                break;
                case "kill":
			stop();
                break;
                case "bot":
                API.chatLog("[Bot] Les commandes sont: /max <secondes>, /add <message>, /remove <id-message>, /start, /stop, /timer <secondes>, /check <id-message>, /list, /send <id-message>, /id, /black, /blacklist");
        }
}

 /* --------------GESTION MESSAGES AUTOS-------------*/
function postmsg() {
        var random = Math.floor((Math.random() * msgs.length));
        API.sendChat(msgs[random]);
}
 
function refreshtimer() {
        stoptimer(timer);
        timer = window.setInterval(postmsg, time*1000);
}
 
function stoptimer() {
        window.clearInterval(timer);
        timer = null;
}

 /* --------------GESTION JOIN UTILISATEURS-------------*/

function listener(obj){
		if (users.indexOf(obj.username) != -1) {
			var random = Math.floor(Math.random() * 4);
			API.chatLog("R: " + random);
			if(random == 0){
				API.sendChat("[Bot] Welcome back, @" + obj.username + " !");
			}else if(random == 1){
				API.sendChat("[Bot] Ah ! Te revoilà parmi nous, @" + obj.username + " !");
			}else if(random == 2){
				API.sendChat("[Bot] Un revenant ! Coucou @" + obj.username + " !");
			}else{
				API.sendChat("[Bot] Hey ! De retour, @" + obj.username + " ?");
			}
		}else{
			users.push(obj.username);
			if(obj.username == "Lioche"){
				API.sendChat("[Bot] Saluez mon créateur, @" + obj.username + " !");
			}else{
				API.sendChat("[Bot] Bienvenue parmi nous, @" + obj.username + " !");
			}
		}
}
 /* ----------------------------------------------------*/
 
 
 function chatlistener(data){
 	var un = data.un;
	var msg = data.message.toLowerCase();
	var date = new Date();
	var role = API.getUser(data.uid).role;
 	var random = Math.floor(Math.random() * 4);
 	
 	if(msg.indexOf("@koopitz") != -1 || msg.indexOf("bot") != -1) {
 		
 		if(msg.indexOf("tu") != -1 && msg.indexOf("suce") != -1){
 			if(random <= 1){
 				API.sendChat("@" + un + " | Malheureusement, un bot ne suce pas..");
 			}else if(random == 2){
 				API.sendChat("@" + un + " | C'est quoi 'suce' ?");
 			}else{
 				API.sendChat("@" + un + " | Peut-être.. C'est un secret :3");
 			}
 		}
 		
 		else if(msg.indexOf("quel") != -1 && msg.indexOf("age") != -1 && msg.indexOf("t") != -1 ){
 			if(random <= 1){
 				API.sendChat("@" + un + " | Hum.. Je ne sais plus..");
 			}else if(random == 2){
 				API.sendChat("@" + un + " | 42 ! Ouais, 42 !");
 			}else{
 				API.sendChat("@" + un + " | Je dois avoir environ.. heu.. 3 mois.");
 			}
 		}
 		
 		else if(msg.indexOf("qui") != -1 && msg.indexOf("es") != -1 && msg.indexOf("t") != -1) {
 			if(random <= 1){
 				API.sendChat("@" + un + " | Je suis le fruit de ton imagination.");
 			}else if(random == 2){
 				API.sendChat("@" + un + " | Je suis un bot. :')");
 			}else{
 				API.sendChat("@" + un + " | Suis-je seulement quelqu'un ?");
 			}
 		}
 		
 		else if(msg.indexOf("veux") != -1 && msg.indexOf("t") != -1 && msg.indexOf("faire") != -1 && msg.indexOf("amour") != -1 ){
 			if(random <= 1){
 				API.sendChat("@" + un + " | Ok, fabriquons de l'amour !");
 			}else if(random == 2){
 				API.sendChat("@" + un + " | Bien-sur, si tu apprécies les barres de fer.. :lollipop: ");
 			}else{
 				API.sendChat("@" + un + " | Non désolé, t'es pas mon style. :/");
 			}
 		}
 		
 		else if(msg.indexOf("quel") != -1 && msg.indexOf("jour") != -1 && msg.indexOf("somme") != -1 && msg.indexOf("nous") != -1){
 			
 			switch(date.getMonth()+1){
 				case 1:
 				var mois = "janvier";
 				break;
 				case 2:
 				var mois = "février";	
 				break;
 				case 3:
 				var mois = "mars";	
 				break;
 				case 4:
 				var mois = "avril";
 				break;
 				case 5:
 				var mois = "mai";	
 				break;
 				case 6:
 				var mois = "juin";	
 				break;
 				case 7:
 				var mois = "juillet";	
 				break;
 				case 8:
 				var mois = "août";	
 				break;
 				case 9:
 				var mois = "septembre";	
 				break;
 				case 10:
 				var mois = "octobre";	
 				break;
 				case 11:
 				var mois = "novembre";
 				break;
 				case 12:
 				var mois = "décembre";	
 				break;
 				default:
 				var mois = "erreur de conversion !"
 				break;
 			}
			API.sendChat("@" + un + " | Nous sommes le " + date.getDate() + " " + mois + " ^^");
 		}
 		
 		else if(msg.indexOf("pourquoi") != -1 && msg.indexOf("t") != -1 && msg.indexOf("existe") != -1) {
 			if(random <=1){
 				API.sendChat("@" + un + " | Et pourquoi pas ?! é_è");
 			}else if(random == 2){
 				API.sendChat("@" + un + " | Toi, pourquoi t'existe ?!");
 			}else{
 				API.sendChat("@" + un + " | Car Lioche l'a voulu.");
 			}
 		}
 		
 		else if(msg.indexOf("m") != -1 && msg.indexOf("offre") != -1 && msg.indexOf("glace") != -1) {
 			if(random <= 1){
 				API.sendChat("@" + un + " | Mais oui mon enfant.. Tien ! :icecream: ");
 			}else if(random == 2){
 				API.sendChat("@" + un + " | Non, tu n'as pas été sage !");
 			}else{
 				API.sendChat("@" + un + " | Désolé, je n'en ai plus..");
 			}
 		}
 		
 		else if(msg.indexOf("je") != -1 && msg.indexOf("eux") != -1 && msg.indexOf("un") != -1 && msg.indexOf("cookie") != -1) {
 			if(random <= 1){
 				API.sendChat("@" + un + " | Tu veux un cookie ? Hum.. Tien :cookie: ");
 			}else if(random == 2){
 				API.sendChat("@" + un + " | Tien ! Ah bah non, c'était une blague.");
 			}else{
 				API.sendChat("@" + un + " | Oups, je les ai tous mangé..");
 			}
 		}
 		
 		else if(msg.indexOf("t") != -1 && msg.indexOf("aime") != -1 && msg.indexOf("les") != -1 && msg.indexOf("licorne") != -1) {
 			API.sendChat("@" + un + " | Owiiiiiiii ! J'adooooreee ! <3 ");
 		}
 		
 		else if(msg.indexOf("o") != -1 && msg.indexOf("habite") != -1 && msg.indexOf("t") != -1) {
 			if(random <= 1){
 				API.sendChat("@" + un + " | Dans ma poche ! o:");
 			}else if(random == 2){
 				API.sendChat("@" + un + " | Dans ton.. Hihihi");
 			}else{
 				API.sendChat("@" + un + " | C'est ici, chez moi !");
 			}
 		}
 	
 	}
 	if(role >= 3){
 		if(msg.indexOf("!black") != -1){
 			API.moderateDeleteChat(data.cid);
 			API.moderateForceSkip();
 			var titre = API.getMedia().title;
			var id = API.getMedia().cid;
        	      	black.push(id);
		  	setTimeout(function() {        			
        		API.sendChat("["+ un +"] Ajout de: « " + titre.toLowerCase() + " » à la blacklist !");}, 2000);
 		}
 	}
 }
 
function stop(){
	API.sendChat("|~ Désactivation du bot !");
	API.off(API.ADVANCE);
	API.off(API.CHAT_COMMAND);
	API.off(API.USER_JOIN);
	API.off(API.CHAT);
}

